Wykorzystane biblioteki

library(readxl)
library(httr)
library(knitr)
library(plyr)
library(gridExtra)
library(tidyverse)
library(janitor)
library(scales)
library(kableExtra)
library(qwraps2)
library(rmarkdown)
library(caret)
library(reshape2)
library(plotly)
library(naniar)
library(gganimate)

Wczytywanie danych

Surowe dane zostały pobrane z adresu url (http://www.cs.put.poznan.pl/dbrzezinski/teaching/zed/wuhan_blood_sample_data_Jan_Feb_2020.xlsx) bezpośrednio bez konieczności ręcznego pobierania zbioru danych w celu zapewnienia powtarzalności eksperymentów.

GET(url, write_disk(data_file <- tempfile(fileext = ".xlsx")))
raw_df <- read_excel(data_file) 

Przetwarzanie zbioru danych

Rozmiar danych

Zbiór danych składa się z 6120 rekordów medycznych opisywanych przez 81 atrybutów, z których pierwsze 7 odnosi się bezpośrednio do samego pacjenta (jego identyfikator, data przyjęcia do szpitala, wiek, …), a pozostałe 74 atrybuty zawierają informacje o wynikach przeprowadzonych badań.

Czyszczenie zbioru danych

Pacjenci

Zbiór danych zawiera informacje o 375 pacjentach, u których stwierdzono obecność choroby COVID-19. Dane zostały zebrane na przestrzeni od 2020-01-10 do 2020-03-04.

Atrybuty główne - informacje o pacjentach

  • patient_id (PATIENT_ID) - unikalny identyfikator przypisany do każdego pacjenta
  • test_date (RE_DATE) - pole, którego znaczenie w dokumentacji zbioru nie jest jednoznacznie opisane, ale na podstawie pozostałych atrybutów zbioru można wyprowadzić, że jest to data wykonania badania
  • age - wiek pacjenta
  • gender - płeć pacjenta, przyjmuje wartości 1 lub 2, gdzie 1 oznacza mężczyznę, a 2 kobietę. Przypisane wartości do płci nie było jawnie udokumentowane, natomiast poprawną identyfikację umożliwiały dopiero opublikowane statystyki zbioru.
  • admission_date (Admission time) - data przyjęcia pacjenta do szpitala.
  • discharge_date (Discharge time) - data wypisania pacjenta ze szpitala w przypadku ozdrowienia lub data śmierci.
  • survived (outcome) - wynik przebytej przez pacjenta choroby, przyjmuje wartości 0 lub 1, gdzie 0 oznacza wyleczenie, a 1 - śmierć. Przypisanie odpowiedniego wyniku do wartości atrybutu było możlwie dzięki dostępnym statystykom zbioru, podobnie jak w przypadku atrybutu ‘gender’.

Dane demograficzne pacjentów

Wśród pacjentów najliczniejszą grupę pod względem płci stanowią mężczyźni - 224 pacjentów (59.7%).

Średnia wieku pacjentów wynosi 58.83, pełne informacje o rozkładzie wieku pacjetnów dostępne są w tabeli poniżej.
Min Median Mean Max
18 62 58.83 \(\pm\) 16.46 95

Dodatkowo do danych o pacjentach dodany został nowy atrybut wyliczeniowy - age_group przypisujący pacjentów do dziesięcioletnich grup wiekowych, powstały na podstawie podziału atrybutu numerycznego - age. Najliczniejszą grupą wiekową wśród pacjentów jest (60,70] - 114 pacjentów (30.4%), natomiast najmniej liczną grupą jest (10,20] - 2 pacjentów (0.5%).

Statystyki dotyczące demografii pacjentów zostały również zwizualizowane na wykresach kołowych poniżej:

Hospitalizacja

Minimalnym czasem hospitalizacji był 0:02:01:57 (dd:hh:mm:ss), a maksymalnym - 35:04:05:54. Średnim czasem jaki pacjenci spędzili w szpitalu był 10:20:29:08.

Pełna dystrybucja czasu hospitalizacji jest przedstawiona w tabeli poniżej:

age_group Mean Max Min Standard_deviation
(10,20] 8:16:05:49 14:15:13:49 2:16:57:48 8:10:25:16
(20,30] 11:13:04:00 17:16:22:40 0:10:44:51 4:22:31:21
(30,40] 14:02:16:38 35:04:05:54 0:03:50:46 7:02:59:42
(40,50] 13:13:26:15 29:04:45:21 0:12:57:09 7:12:09:37
(50,60] 11:07:50:50 33:17:10:13 0:03:40:29 7:16:55:57
(60,70] 10:10:54:04 29:00:38:10 0:03:55:53 7:13:14:12
(70,80] 7:18:15:24 27:18:53:29 0:11:46:57 6:14:10:13
(80,90] 9:00:41:43 31:16:54:28 0:02:01:57 8:04:20:22
(90,100] 4:10:55:24 4:18:31:13 3:21:22:44 0:09:38:49

Liczba przeprowadzonych badań

Pacjenci byli poddawani badaniom ze średnią częstotliwością 2.2619947

ggplot(data=patients, aes(x=age_group, y=tests_freq, fill=age_group)) +
  geom_bar(stat="summary", fun="mean") + 
  theme_bw() +
  scale_fill_brewer(palette = "Set1") +
  theme(legend.position = "none") +
  labs(
    title="Dzienna częstotliwość przeprowadzania badań",
    x="Grupa wiekowa",
    y="Częstotliwość badań"
  )

Śmiertelność

Bezwględna śmiertelność pacjentów ze zbioru danych wyniosła 46.0%.

Tabela z procentowo wyrażoną śmiertelnością w zależności od grupy wiekowej
survived (10,20] (20,30] (30,40] (40,50] (50,60] (60,70] (70,80] (80,90] (90,100] Combined
yes 50.00% 100.00% 97.73% 81.08% 65.15% 44.44% 12.96% 14.81% 0.00% 54.02%
no 50.00% 0.00% 2.27% 18.92% 34.85% 55.56% 87.04% 85.19% 100.00% 45.98%

Najbardziej narażeni byli pacjenci z grupy wiekowej (90,100], których śmiertelność wyniosła 100.0%, ale jest to również jedna z najmniej licznych grup pacjentów.

Najmniej narażoną grupą byli pacjenci w wieku (20,30], u których nie zanotowano przypadków śmiertelnych.

Dodatkowo ze względu na małą reprezentację grupy wiekowej (10,20], tylko dwóch pacjentów - przypadek śmiertelny oraz ozdrowiciel, współczynnik śmiertelności (oraz przeżywalności) jest przekłamany.

Biomarkery

Pozostałe atrybuty zbioru danych (znajdujące się w kolumnach od 8 do 81) zawierają wyniki badań pacjentów. Podstawowe statystyki dotyczące biomarkerów znajdują się w tabeli poniżej:

Częstotliwość mierzonych czynników medycznych podczas badań pacjentów

Najczęściej mierzonymi czynnikami podczas przeprowadzonych badań były: liczba leukocytów (White blood cell count) oraz liczba erytrocytów (Red blood cell count).

Najrzadziej sprawdzane czynniki medyczne wśród pacjentów
Czynnik Liczba badań % badań
Interleukin 10 267 4.36%
Interleukin 2 receptor 268 4.38%
Interleukin 8 268 4.38%
Tumor necrosis factor<U+03B1> 268 4.38%
Interleukin 1ß 268 4.38%
Interleukin 6 272 4.44%
Najczęściej sprawdzane czynniki medyczne wśród pacjentów
Czynnik Liczba badań % badań
Red blood cell count 1127 18.42%
White blood cell count 1127 18.42%
Serum potassium 980 16.01%
calcium 979 16.00%
serum sodium 975 15.93%
Serum chloride 975 15.93%

Korelacje atrybutów

Poniższa macierz zawiera wartości korelacji pomiędzy atrybutami biomedycznymi testowanych wśród pacjentów. Istnieje kilka korelacji pomiędzy atrybutami których wartość wynosi 1. Dzieje się tak ze względu na dwa czynniki: duża liczbę przeprowadzonych badań i mała oraz zmienna liczba sprawdzanych czynników podczas pojedynczego badania. Przykładowo korelacja czynników hemoglobin oraz HCV antibody quantification wynosi 1, ale liczba rekordów w jakich te dwa czynniki były wspólnie mierzone wynosi 2, przez co wartość ich korelacji może być błędnie zawyżona.

Najważniejsze atrybuty biomedyczne

W artykule powiązanym z analizowanym zbiorem danych - Yan, L., Zhang, HT., Goncalves, J. et al. An interpretable mortality prediction model for COVID-19 patients - przedstawionych zostało 10 najważniejszych atrybutów zbioru danych na podstawie wyników modelu klasyfikatora Multi-tree XGBoost. Trzema najważniejszymi wyselekcjonowanymi cechami były (w kolejności malejącej ważności atrybutów): Lactate dehydrogenase (dehydrogenaza mleczanowa, LDH), lymphocyte count (liczba limfocytów) i High sensitivity C-reactive protein (wysoko czułe białko C-reaktywne, hs-CRP).

Poniżej przedstawiony został wykres, pochodzący z wymienionego artykułu, przedstawiający 10 najbardziej kluczowych atrybutów zbioru danych przy szacowaniu śmierelności pacjentów.

Autorzy m.in. poniższych publikacji:

potwierdzają obserwacje, iż badanie poziomów: enzymu dehydrogenazy mleczanowej (LDH), wysokoczułego białka C-reaktywnego (hs-CRP) oraz liczby limfocytów pacjenta mogą służyć przy szacowaniu śmierelności/dotkliwości pojedynczych przypadków koronawirusa.

## `summarise()` regrouping output by 'test_performed' (override with `.groups` argument)
## `summarise()` regrouping output by 'test_performed' (override with `.groups` argument)
## `summarise()` regrouping output by 'test_performed' (override with `.groups` argument)

Dehydrogenaza mleczanowa (LDH)

Wysokoczułe białko C-reaktywne (hs-CRP)

Limfocyty